# 请求有请求的模型，响应也有响应的模型，在路径里加上 response_model
# 新增和返回模型是不一样的，要各自定义，如果多个模型间差别不大，可以用类的继承
# 还有花里胡哨的：设置响应默认值、response_model_exclude_unset 之类的，感觉没什么用还容易误导，先不管，以后再说


from fastapi import FastAPI, Response
from fastapi.responses import JSONResponse, RedirectResponse
from pydantic import BaseModel, EmailStr

app = FastAPI()


class BaseUser(BaseModel):
    username: str
    email: EmailStr
    full_name: str | None = None


class UserIn(BaseUser):
    password: str


# 提交的时候有密码，返回时不返回密码
@app.post("/user/")
async def create_user(user: UserIn) -> BaseUser:
    return user


@app.get("/portal")
async def get_portal(teleport: bool = False) -> Response:  # 响应类型如果不想用Any，可以导入 Response
    if teleport:
        return RedirectResponse(url="https://www.youtube.com/watch?v=dQw4w9WgXcQ")
    return JSONResponse(content={"message": "Here's your interdimensional portal."})
